package cl.ncx.cmvrc.persistence.base.entities.solicitud;

import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import cl.ncx.cmvrc.persistence.base.entities.solicitud.MetadataProceso;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.TipoProceso;

/**
 * Proceso entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "proceso", schema = "base")
@SequenceGenerator(name= "proceso_seque", sequenceName= "base.proceso_id_proceso_seq")
public class Proceso implements java.io.Serializable {

	// Fields

	private Integer idProceso;
	private TipoProceso tipoProceso;
	private Integer instancia;
	private Timestamp fechaCreacion;
	private Set<MetadataProceso> metadataProcesos = new HashSet<MetadataProceso>(
			0);

	// Constructors

	/** default constructor */
	public Proceso() {
	}

	/** minimal constructor */
	public Proceso(Integer idProceso, TipoProceso tipoProceso,
			Integer instancia, Timestamp fechaCreacion) {
		this.idProceso = idProceso;
		this.tipoProceso = tipoProceso;
		this.instancia = instancia;
		this.fechaCreacion = fechaCreacion;
	}

	/** full constructor */
	public Proceso(Integer idProceso, TipoProceso tipoProceso,
			Integer instancia, Timestamp fechaCreacion,
			Set<MetadataProceso> metadataProcesos) {
		this.idProceso = idProceso;
		this.tipoProceso = tipoProceso;
		this.instancia = instancia;
		this.fechaCreacion = fechaCreacion;
		this.metadataProcesos = metadataProcesos;
	}

	// Property accessors
	@Id
	@Column(name = "id_proceso", unique = true, nullable = false)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "proceso_seque")
	public Integer getIdProceso() {
		return this.idProceso;
	}

	public void setIdProceso(Integer idProceso) {
		this.idProceso = idProceso;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "tpo", nullable = false)
	public TipoProceso getTipoProceso() {
		return this.tipoProceso;
	}

	public void setTipoProceso(TipoProceso tipoProceso) {
		this.tipoProceso = tipoProceso;
	}

	@Column(name = "instancia", nullable = false)
	public Integer getInstancia() {
		return this.instancia;
	}

	public void setInstancia(Integer instancia) {
		this.instancia = instancia;
	}

	@Column(name = "fecha_creacion", nullable = false, length = 35)
	public Timestamp getFechaCreacion() {
		return this.fechaCreacion;
	}

	public void setFechaCreacion(Timestamp fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "proceso")
	public Set<MetadataProceso> getMetadataProcesos() {
		return this.metadataProcesos;
	}

	public void setMetadataProcesos(Set<MetadataProceso> metadataProcesos) {
		this.metadataProcesos = metadataProcesos;
	}

}